﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using VentaElectrodomesticos.GUI.Base;
using VentaElectrodomesticos.Datos;
using VentaElectrodomesticos.Contrato;
using VentaElectrodomesticos.Negocio;

namespace VentaElectrodomesticos.GUI.AbmCliente
{
    public partial class FormAbmCliente : BaseListado<ClienteNegocio,FormCliente,ClienteDAO,Cliente>
    {
        private static FormAbmCliente instance;
        private List<Provincia> provincias = new List<Provincia>();

        public static FormAbmCliente getInstance()
        {
            if (instance == null)
                instance = new FormAbmCliente();
            instance.BringToFront();
            return instance;
        }

        public FormAbmCliente()
        {
            InitializeComponent();

            ProvinciaNegocio provinciaNegocio = new ProvinciaNegocio();
            this.provincias = provinciaNegocio.getAll();
            this.cbProvinciasFilter.DataSource = this.provincias;
            this.cbProvinciasFilter.ValueMember = "Id";
            this.cbProvinciasFilter.DisplayMember = "nombre";
            this.cbProvinciasFilter.SelectedIndex = -1;

        }

        protected override void initTable(DataGridView table)
        {
            table.Columns["Provincia_id"].Visible = false;
            table.Columns["Tipo_Id"].Visible = false;
            table.Columns["_Tipo"].Visible = false;

            table.Columns["_provincia"].HeaderText = "Provincia";
        }

        protected override DataGridView DgList
        {
            get
            {
                return this.dgListClientes;
            }            
        }

        protected override void OnClosed(EventArgs e)
        {
            instance = null;
            base.OnClosed(e);
        }

        protected override Cliente getFilter()
        {
            Cliente clienteFilter = new Cliente();
            clienteFilter.Nombre = tbFilterNombre.Text;
            clienteFilter.Apellido = tbApellidoFilter.Text;
            clienteFilter.Dni = tbDNIFilter.Text;

            if (Convert.ToInt32(cbProvinciasFilter.SelectedValue) != 0)
            {
                clienteFilter.Provincia_id = Convert.ToInt32(cbProvinciasFilter.SelectedValue);
            }
            return clienteFilter;
        }

        private void tbFilterNombre_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                base.filter();
        }

        protected override void initForm(FormCliente formCliente)
        {
            formCliente.setProvincias(this.provincias);
        }

        protected override void cumpleValidaciones()
        {
            if (!(RegCondition.Condition(tbFilterNombre, RegCondition.RegularExpressions.Alphabet) || tbFilterNombre.Text == ""))
                this.Errores.Add("El nombre no es válido");
            if (!(RegCondition.Condition(tbApellidoFilter, RegCondition.RegularExpressions.Alphabet) || tbApellidoFilter.Text == ""))
                this.Errores.Add("El apellido no es válido");
            if (!(RegCondition.Condition(tbDNIFilter, RegCondition.RegularExpressions.Numeric) || tbDNIFilter.Text == ""))
                this.Errores.Add("El formato del DNI debe ser numérico, sin puntos");
        }

        protected override void limpiar()
        {
            this.tbApellidoFilter.Text = "";
            this.tbDNIFilter.Text = "";
            this.tbFilterNombre.Text = "";
            this.cbProvinciasFilter.SelectedIndex= -1;

            base.limpiar();
        }

        protected override List<Cliente> getObjectList()
        {
            if (this.IsSearchForm)
            {
                return this.Negocio.getAllActives();
            }
            else
            {
                return base.getObjectList();
            }
        }

        protected override List<Cliente> getFilteredObjectList(Cliente filter)
        {
            if (this.IsSearchForm)
            {
                filter.inactivo = false;
            }
            return base.getFilteredObjectList(filter);
        }
    }
}
